package com.jprocms.module.cms.dal.dataobject.task;

import com.jpro.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.jprocms.module.cms.enums.EnumTask;
import lombok.*;

import java.io.PrintWriter;
import java.io.Serializable;
import java.io.StringWriter;
import java.time.OffsetDateTime;

/**
 * 任务 DO
 *
 * @author JPROCMS4444
 */
@TableName("cms_task")
@KeySequence("cms_task_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TaskDO extends BaseDO implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 类型：生成静态页
     */
    public static final short TYPE_HTML = 1;
    /**
     * 类型：敏感词扫描
     */
    public static final short TYPE_CHECK_SENSITIVE_WORD = 3;
    /**
     * 数据库表名
     */
    public static final String TABLE_NAME = "task";


    /**
     * 生成当前站点所有静态页
     */
    public static final String TABLE_NAME_SITE = "生成当前站点所有静态页";
    /**
     * 生成当前站点所有栏目静态页
     */
    public static final String TABLE_NAME_CHANNEL = "生成当前站点所有栏目静态页";
    /**
     * 生成当前站点所有内容静态页
     */
    public static final String TABLE_NAME_CONTENT = "生成当前站点所有内容静态页";
    /**
     * 生成当前内容相关静态页
     */
    public static final String TASK_NAME_CONTENT_AUTO = "生成当前内容相关静态页";
    /**
     * 生成当前栏目相关静态页
     */
    public static final String TASK_NAME_CHANNEL_AUTO = "生成当前栏目相关静态页";
    /**
     * 生成当前站点所有包含页面静态页
     */
    public static final String TABLE_NAME_INCLUDE_PAGE = "生成当前站点所有包含页面静态页";
    /**
     * 扫描当前站点所有内容是否包含敏感词
     */
    public static final String TASK_NAME_SCAN_SENSITIVEWORD = "扫描当前站点已发布内容是否包含敏感词";

    public TaskDO(Long siteId, Long userId, String name, Short taskType) {
        setSiteId(siteId);
        setUserId(userId);
        setName(name);
        setTaskType(taskType);
    }

    /**
     * 任务ID
     */
    @TableId
    private Long id;
    /**
     * 站点ID
     */
    private Long siteId;
    /**
     * 用户ID
     */
    private Long userId;
    /**
     * 名称
     */
    private String name;
    /**
     * 开始时间
     */
    private OffsetDateTime beginTime = OffsetDateTime.now();
    /**
     * 结束时间
     */
    private OffsetDateTime endTime;
    /**
     * 已完成数量
     */
    private Integer currentNum;
    /**
     * 总数量
     */
    private Integer totalNum;
    /**
     * 类型(1:HTML生成,2:全文索引生成 3敏感词检测)
     */
    private Short taskType;
    /**
     * 状态(0:等待,1:运行中,2:出错,3:停止,4:完成)
     */
    private Short status;
    /**
     * 错误信息
     */
    private String errorMsg;

    public void setError(Exception e) {
        StringWriter errorWriter = new StringWriter();
        PrintWriter printWriter = new PrintWriter(errorWriter);
        e.printStackTrace(printWriter);
        setEndTime(OffsetDateTime.now());
        setStatus(EnumTask.STATUS_ERROR.getStatus());
        setErrorMsg(errorWriter.toString());
    }


}
